package com.resifind.www.dao;

import com.resifind.www.po.*;

import java.sql.Connection;
import java.util.List;

/**
 * @author 36069
 */
public interface MerchantDao {

    /**
     * 根据用户id添加商家
     *
     * @param userId 用户id
     * @param conn   数据库连接
     * @return 是否添加成功
     */
    boolean addMerchant(int userId, Connection conn);

    /**
     * 根据商家id查询商家信息
     *
     * @param merchantId 商家id
     * @return 商家对象
     */
    Merchant queryMerchantByMerchantId(int merchantId);

    /**
     * 已登录客户分页查询商家信息
     * <p>
     * 查询正常营业的并排除黑名单的商家，判断店铺名称不为空时进行模糊查询；
     * 查询是否收藏；
     * </p>
     *
     * @param currentPage 当前页码
     * @param pageSize    每页显示的记录数
     * @param tradeName   店铺名称
     * @param clientId    客户id
     * @return 商家集合
     */
    List<Merchant> queryOpenMerchantForClient(int currentPage, int pageSize, String tradeName, int clientId);

    /**
     * 游客分页查询商家信息
     * <p>
     * 查询正常营业的商家，判断店铺名称不为空时进行模糊查询；
     * </p>
     *
     * @param currentPage 当前页码
     * @param pageSize    每页显示的记录数
     * @param tradeName   店铺名称
     * @return 商家集合
     */
    List<Merchant> queryOpenMerchantForGuest(int currentPage, int pageSize, String tradeName);

    /**
     * 管理员分页查询所有商家信息
     * <p>
     * 查询所有商家，判断店铺名称不为空时进行模糊查询；
     * </p>
     *
     * @param currentPage 当前页码
     * @param pageSize    每页显示的记录数
     * @param tradeName   店铺名称
     * @return 商家集合
     */
    List<Merchant> queryAllMerchantForAdmin(int currentPage, int pageSize, String tradeName);

    /**
     * 客户查询商家数量
     *
     * @param tradeName 店铺名称
     * @param clientId  客户id
     * @return 商家数量
     */
    int queryMerchantCountForClient(String tradeName, int clientId);

    /**
     * 游客查询商家数量
     *
     * @param tradeName 店铺名称
     * @return 商家数量
     */
    int queryMerchantCountForGuest(String tradeName);

    /**
     * 管理员查询商家数量
     *
     * @param tradeName 店铺名称
     * @return 商家数量
     */
    int queryMerchantCountForAdmin(String tradeName);

    /**
     * 根据用户id查询商家信息
     *
     * @param userId 用户id
     * @return 商家对象
     */
    Merchant queryMerchantByUserId(int userId);

    /**
     * 根据房型id查询商家信息
     *
     * @param roomId 房型id
     * @return 商家对象
     */
    Merchant queryMerchantByRoomId(int roomId);

    /**
     * 修改商家信息
     *
     * @param merchant 商家对象
     * @param conn     数据库连接
     * @return 是否修改成功
     */
    boolean update(Merchant merchant, Connection conn);

    /**
     * 查询正在申请的商家信息
     *
     * @return 申请中的商家集合
     */
    List<Merchant> queryPendingMerchants();

    /**
     * 修改商家状态
     *
     * @param merchantId 商家id
     * @param newStatus  新的商家状态
     * @param conn       数据库连接
     * @return 是否修改成功
     */
    boolean updateMerchantStatus(int merchantId, String newStatus, Connection conn);

    /**
     * 增加或减少商家的总销量
     *
     * @param merchantId 商家id
     * @param num        增加或减少的数量
     * @param conn       数据库连接
     * @return 是否修改成功
     */
    boolean updateTotalSales(int merchantId, int num, Connection conn);

    /**
     * 增加或减少商家营业额
     *
     * @param merchantId 商家id
     * @param amount     增加或减少的金额
     * @param conn       数据库连接
     * @return 是否修改成功
     */
    boolean updateTurnover(int merchantId, double amount, Connection conn);

    /**
     * 增加商家浏览量
     *
     * @param merchantId 商家id
     * @param conn       数据库连接
     * @return 是否修改成功
     */
    boolean updateViewCount(int merchantId, Connection conn);

}
